JavaScript ํ๋ก์ ํธ๋ฅผ TypeScript๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ๋ ์ค์ฉ์ ์ธ ๊ฐ์ด๋์ ๋๋ค. ์ํํ ์ ํ์ ์ํ ์ด์ , ์ ๋ต, ๋๊ตฌ ๋ฐ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๋ค๋ฃน๋๋ค.
JavaScript๋ฅผ TypeScript๋ก ๋ง์ด๊ทธ๋ ์ด์ : ์ข ํฉ ๊ฐ์ด๋
๋์์์ด ๋ฐ์ ํ๋ ์น ๊ฐ๋ฐ ์ธ๊ณ์์ ํ์ฅ ๊ฐ๋ฅํ๊ณ ์ ์ง๋ณด์ํ๊ธฐ ์ฌ์ฐ๋ฉฐ ๊ฒฌ๊ณ ํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๋ ค๋ฉด ์ฌ๋ฐ๋ฅธ ๋๊ตฌ์ ๊ธฐ์ ์ ์ ํํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. JavaScript๋ ์ค๋ซ๋์ ํ๋ก ํธ์๋ ๊ฐ๋ฐ์ ์ง๋ฐฐ์ ์ธ ์ธ์ด์์ง๋ง, ํ๋ก์ ํธ๊ฐ ๋ณต์กํด์ง์ ๋ฐ๋ผ ๋์ ์ธ ํน์ฑ์ด ์ด๋ ค์์ ์ด๋ํ ์ ์์ต๋๋ค. ์ ์ ํ์ดํ์ ์ถ๊ฐํ๋ JavaScript์ ์์ ์งํฉ์ธ TypeScript๋ ๊ฐ๋ ฅํ ์๋ฃจ์ ์ ์ ๊ณตํฉ๋๋ค. ์ด ๊ฐ์ด๋๋ JavaScript ํ๋ก์ ํธ๋ฅผ TypeScript๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ๋ ๊ฒ์ ๋ํ ์ข ํฉ์ ์ธ ๊ฐ์๋ฅผ ์ ๊ณตํ๋ฉฐ, ์ฑ๊ณต์ ์ธ ์ ํ์ ์ํ ์ด์ , ์ ๋ต, ๋๊ตฌ ๋ฐ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๋ค๋ฃน๋๋ค.
TypeScript๋ก ๋ง์ด๊ทธ๋ ์ด์ ํด์ผ ํ๋ ์ด์ ?
๊ธฐ์ ์ ์ธ ์ธ๋ถ ์ฌํญ์ ๋ฐ์ด๋ค๊ธฐ ์ ์, TypeScript๋ฅผ ๊ฐ์น ์๋ ํฌ์๋ก ๋ง๋๋ ์ฃผ์ ์ฅ์ ๋ค์ ์ดํด๋ณด๊ฒ ์ต๋๋ค:
- ํฅ์๋ ํ์ ์์ ์ฑ: TypeScript์ ์ ์ ํ์ดํ ์์คํ ์ ๊ฐ๋ฐ ์ค์ ์ค๋ฅ๋ฅผ ํฌ์ฐฉํ์ฌ ๋ฐํ์ ์๊ธฐ์น ์์ ์ํฉ์ ๋ฐฉ์งํ๊ณ ์ฝ๋ ์ ๋ขฐ์ฑ์ ํฅ์์ํต๋๋ค. ์ด๋ ๊ฐ๋ฐ์๊ฐ ์ฝ๋๋ฒ ์ด์ค์ ๋ชจ๋ ๋ถ๋ถ์ ์์ ํ ์ต์ํ์ง ์์ ์ ์๋ ๋๊ท๋ชจ ํ์ ํนํ ์ ์ฉํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์ซ์๋ฅผ ๊ธฐ๋ํ์ง๋ง ๋ฌธ์์ด์ ๋ฐ๋ ํจ์๋ฅผ ์์ํด ๋ณด์ธ์. JavaScript๋ ๋ฐํ์์๋ง ์ค๋ฅ๋ฅผ ๋ฐ์์ํค์ง๋ง, TypeScript๋ ์ปดํ์ผ ์ค์ ์ด๋ฅผ ํ๋๊ทธํฉ๋๋ค.
- ๊ฐ์ ๋ ์ฝ๋ ์ ์ง๋ณด์์ฑ: ํ์ ์ ์ฝ๋์ ์ฌ๋ฌ ๋ถ๋ถ์ด ์ด๋ป๊ฒ ์ํธ์์ฉํ๋์ง์ ๋ํ ๋ช ํํ ๊ณ์ฝ์ ์ ๊ณตํ์ฌ, ๋ณต์กํ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ดํดํ๊ณ ๋ฆฌํฉํ ๋งํ๋ฉฐ ์ ์ง๋ณด์ํ๋ ๊ฒ์ ๋ ์ฝ๊ฒ ๋ง๋ญ๋๋ค. ๋ช ์์ ์ธ ํ์ ์ ๋ณ์, ํจ์, ํด๋์ค์ ๋ชฉ์ ๊ณผ ์์๋๋ ๋์์ ๋ช ํํ ํ๋ ๋ฌธ์ ์ญํ ์ ํฉ๋๋ค.
- ๋ ๋์ IDE ์ง์: TypeScript๋ฅผ ์ธ์ํ๋ IDE(ํตํฉ ๊ฐ๋ฐ ํ๊ฒฝ)๋ ์๋ ์์ฑ, ์ ์ ์ด๋, ๋ฆฌํฉํ ๋ง ๋๊ตฌ์ ๊ฐ์ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ฌ ๊ฐ๋ฐ์ ์์ฐ์ฑ์ ํฌ๊ฒ ํฅ์์ํต๋๋ค. ์ด๋ฌํ ๊ธฐ๋ฅ์ TypeScript๊ฐ ์ ๊ณตํ๋ ํ์ ์ ๋ณด๋ฅผ ํตํด ๋์ฑ ๊ฐ๋ ฅํ๊ณ ์ ํํด์ง๋๋ค. VS Code ๋ฐ WebStorm๊ณผ ๊ฐ์ ์ธ๊ธฐ ์๋ IDE๋ ํ์ํ TypeScript ์ง์์ ์ ๊ณตํฉ๋๋ค.
- ์กฐ๊ธฐ ์ค๋ฅ ๊ฐ์ง: TypeScript ์ปดํ์ผ๋ฌ๋ ๋ฐํ์ ์ ์ ์ ์ฌ์ ์ธ ์ค๋ฅ๋ฅผ ์๋ณํ์ฌ ๊ฐ๋ฐ์๊ฐ ๋ฌธ์ ๋ฅผ ์ฌ์ ์ ํด๊ฒฐํ๊ณ ๋๋ฒ๊น ์๊ฐ์ ์ค์ผ ์ ์๋๋ก ํฉ๋๋ค. ์ด๋ฌํ "๋น ๋ฅธ ์คํจ(fail fast)" ์ ๊ทผ ๋ฐฉ์์ ์ฅ๊ธฐ์ ์ผ๋ก ๊ท์คํ ์๊ฐ๊ณผ ์์์ ์ ์ฝํฉ๋๋ค.
- ์ต์ JavaScript ๊ธฐ๋ฅ: TypeScript๋ ์ต์ ECMAScript ํ์ค์ ์ง์ํ์ฌ ๊ฐ๋ฐ์๊ฐ ํธ๋์คํ์ผ๋ ์ด์ ์ ํตํด ์ด์ ๋ธ๋ผ์ฐ์ ์์ ํธํ์ฑ์ ์ ์งํ๋ฉด์ ์ต์ ์ธ์ด ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์๋๋ก ํฉ๋๋ค. ์ด๋ฅผ ํตํด ๋ธ๋ผ์ฐ์ ์ง์์ ํฌ์ํ์ง ์๊ณ ๋ ์ต์ ๋ฐ ๊ฐ์ฅ ํจ์จ์ ์ธ JavaScript ๊ธฐ๋ฅ์ ํ์ฉํ ์ ์์ต๋๋ค.
- ์ ์ง์ ์ฑํ: TypeScript๋ ์ ์ง์ ์ธ ๋ง์ด๊ทธ๋ ์ด์ ์ ๋ต์ ํ์ฉํ์ฌ JavaScript ์ฝ๋๋ฒ ์ด์ค์ ์ผ๋ถ๋ฅผ ์ ์ง์ ์ผ๋ก ๋ณํํ ์ ์์ผ๋ฉฐ, ์ค๋จ๊ณผ ์ํ์ ์ต์ํํฉ๋๋ค. ์ ์ฒด ์ ํ๋ฆฌ์ผ์ด์ ์ ํ ๋ฒ์ ๋ค์ ์์ฑํ ํ์๊ฐ ์์ต๋๋ค.
TypeScript๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ๋ ์ ๋ต
๋๊ท๋ชจ JavaScript ์ฝ๋๋ฒ ์ด์ค๋ฅผ TypeScript๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ๋ ๊ฒ์ ์ด๋ ค์ ๋ณด์ผ ์ ์์ง๋ง, ์ ๋ต์ ์ธ ์ ๊ทผ ๋ฐฉ์์ ์ฑํํ๋ฉด ํ๋ก์ธ์ค๋ฅผ ๊ด๋ฆฌ ๊ฐ๋ฅํ๊ณ ํจ์จ์ ์ผ๋ก ๋ง๋ค ์ ์์ต๋๋ค. ๊ณ ๋ คํด์ผ ํ ๋ช ๊ฐ์ง ์ ๋ต์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
1. ์ ์ง์ ์ฑํ (๊ถ์ฅ ์ ๊ทผ ๋ฐฉ์)
๊ฐ์ฅ ์ผ๋ฐ์ ์ด๊ณ ๊ถ์ฅ๋๋ ์ ๋ต์ ์ฝ๋๋ฒ ์ด์ค๋ฅผ ์ ์ง์ ์ผ๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ๋ ๊ฒ์ ๋๋ค. ์ด๋ฅผ ํตํด TypeScript๋ฅผ ์ ์ฐจ์ ์ผ๋ก ๋์ ํ์ฌ ์ค๋จ์ ์ต์ํํ๊ณ ์งํํ๋ฉด์ ๋ฐฐ์ฐ๊ณ ์ ์ํ ์ ์์ต๋๋ค. ์๋ ๋ฐฉ์์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- ์๊ฒ ์์: ๋ ์๊ณ ์์ฒด ํฌํจ๋ ๋ชจ๋ ๋๋ ์ปดํฌ๋ํธ๋ฅผ TypeScript๋ก ๋ณํํ๋ ๊ฒ๋ถํฐ ์์ํฉ๋๋ค. ์ ์ ์๋์ด ์๊ณ ์์กด์ฑ์ด ์ ์ ์ฝ๋ ์์ญ์ ์ง์คํฉ๋๋ค.
- ํ์ ์ ์ ์ง์ ์ผ๋ก ๋์ : ๋ชจ๋ ๊ฒ์ ์ฆ์ ํ์ ์ ์ถ๊ฐํด์ผ ํ๋ค๋ ์๋ฐ๊ฐ์ ๋๋ผ์ง ๋ง์ธ์. ๊ธฐ๋ณธ ํ์ ์ผ๋ก ์์ํ๊ณ ์์ ๊ฐ์ ์ป์ผ๋ฉด์ ์ ์ง์ ์ผ๋ก ๋ ๊ตฌ์ฒด์ ์ธ ํ์ ์ ์ถ๊ฐํ์ธ์. ํ์ํ ๊ฒฝ์ฐ `any` ํ์ ์ ์์ ํ๋ ์ด์คํ๋๋ก ์ฌ์ฉํ๋, ์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ๋ ๊ตฌ์ฒด์ ์ธ ํ์ ์ผ๋ก ๋์ฒดํ๋ ๊ฒ์ ๋ชฉํ๋ก ํ์ธ์.
- AllowJS ํ์ฉ: `tsconfig.json` ํ์ผ์์ `allowJs` ์ปดํ์ผ๋ฌ ์ต์ ์ ํ์ฑํํฉ๋๋ค. ์ด๋ฅผ ํตํด TypeScript๊ฐ ๋์ผํ ํ๋ก์ ํธ์์ `.js` ๋ฐ `.ts` ํ์ผ์ ๋ชจ๋ ์ปดํ์ผํ ์ ์์ด ๋ง์ด๊ทธ๋ ์ด์ ํ๋ก์ธ์ค ์ค์ JavaScript์ TypeScript ์ฝ๋๋ฅผ ํผํฉํ ์ ์์ต๋๋ค.
- ์ฒ ์ ํ ํ ์คํธ: ๋ณํ๋ ๋ชจ๋์ด ์ฌ๋ฐ๋ฅด๊ฒ ์๋ํ๊ณ ์๋ก์ด ํ์ ์ด ์ด๋ ํ ํ๊ท๋ ๋ฐ์์ํค์ง ์์๋์ง ํ์ธํ๊ธฐ ์ํด ์ฒ ์ ํ ํ ์คํธ๋์๋์ง ํ์ธํฉ๋๋ค.
- ์ ์ง์ ๋ฆฌํฉํ ๋ง: ๋ ๋ง์ ์ฝ๋๋ฅผ TypeScript๋ก ๋ณํํ๋ฉด์, ๋ฆฌํฉํ ๋งํ๊ณ ์ ๋ฐ์ ์ธ ์ฝ๋ ํ์ง์ ๊ฐ์ ํ ๊ธฐํ๋ฅผ ์ก์ผ์ธ์. TypeScript์ ํ์ ์์คํ ์ ์ฌ์ฉํ์ฌ ์ ์ฌ์ ์ธ ์ค๋ฅ๋ฅผ ์๋ณํ๊ณ ์ ๊ฑฐํ์ธ์.
2. ์ํฅ์ ์ ๊ทผ ๋ฐฉ์
์ด ์ ๊ทผ ๋ฐฉ์์ ์์กด์ฑ ๊ทธ๋ํ์ ์ตํ์ ๋ชจ๋๋ถํฐ ์์ํ์ฌ ์ ์ง์ ์ผ๋ก ์์ ์์ค ์ปดํฌ๋ํธ๋ก ๋์๊ฐ๋ ๊ฒ์ ํฌํจํฉ๋๋ค. ์ด๋ ์ ์ ์๋ ์ํคํ ์ฒ์ ๋ช ํํ ๊ด์ฌ์ฌ ๋ถ๋ฆฌ๊ฐ ์๋ ํ๋ก์ ํธ์ ์ ์ฉํ ์ ์์ต๋๋ค.
- ์ ์์ค ๋ชจ๋ ์๋ณ: ์ฝ๋๋ฒ ์ด์ค์ ๋ค๋ฅธ ๋ถ๋ถ์ ๋ํ ์์กด์ฑ์ด ๊ฐ์ฅ ์ ์ ๋ชจ๋์ ๊ฒฐ์ ํฉ๋๋ค. ์ด๋ค์ ์ผ๋ฐ์ ์ผ๋ก ์ ํธ๋ฆฌํฐ ํจ์, ๋ฐ์ดํฐ ๊ตฌ์กฐ ๋๋ ํต์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค.
- ๋ณํ ๋ฐ ํ ์คํธ: ์ด ๋ชจ๋๋ค์ TypeScript๋ก ๋ณํํ๊ณ , ์ ์ ํ ํ์ ์ ์ถ๊ฐํ๋ฉฐ ์ฌ๋ฐ๋ฅด๊ฒ ์๋ํ๋์ง ํ์ธํฉ๋๋ค.
- ์์กด์ฑ ์ ๋ฐ์ดํธ: ๋ชจ๋์ ๋ณํํ๋ฉด์, ๋ค๋ฅธ ๋ชจ๋์ ์์กด์ฑ์ TypeScript ๋ฒ์ ์ ์ฌ์ฉํ๋๋ก ์ ๋ฐ์ดํธํฉ๋๋ค.
- ๋ฐ๋ณต: ์ด ๊ณผ์ ์ ๊ณ์ํ์ฌ ์ ์ฒด ์ฝ๋๋ฒ ์ด์ค๊ฐ ๋ณํ๋ ๋๊น์ง ์ ์ง์ ์ผ๋ก ์์กด์ฑ ๊ทธ๋ํ๋ฅผ ๋ฐ๋ผ ์์ ํฉ๋๋ค.
3. ํํฅ์ ์ ๊ทผ ๋ฐฉ์
์ด ์ ๊ทผ ๋ฐฉ์์ ์ฌ์ฉ์ ์ธํฐํ์ด์ค ์์ ๋๋ ์ ํ๋ฆฌ์ผ์ด์ ์ง์ ์ ๊ณผ ๊ฐ์ ์ต์์ ์์ค ์ปดํฌ๋ํธ๋ถํฐ ์์ํ์ฌ ํ์ ์์ค ๋ชจ๋๋ก ๋ด๋ ค๊ฐ๋ ๊ฒ์ ํฌํจํฉ๋๋ค. ์ด๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฌ์ฉ์ ๋๋ฉด ๋ถ๋ถ์์ TypeScript์ ์ด์ ์ ๋น ๋ฅด๊ฒ ๋ณด๊ณ ์ ํ๋ ํ๋ก์ ํธ์ ์ ์ฉํ ์ ์์ต๋๋ค.
- ๊ณ ์์ค ์ปดํฌ๋ํธ ์๋ณ: ์ฌ์ฉ์์๊ฒ ๊ฐ์ฅ ์ ๋ณด์ด๊ฑฐ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ํต์ฌ ๊ธฐ๋ฅ์ ๋ํ๋ด๋ ์ปดํฌ๋ํธ๋ฅผ ๊ฒฐ์ ํฉ๋๋ค.
- ๋ณํ ๋ฐ ํ ์คํธ: ์ด ์ปดํฌ๋ํธ๋ค์ TypeScript๋ก ๋ณํํ๊ณ , ํ์ ์ ์ถ๊ฐํ๋ฉฐ ์ฌ๋ฐ๋ฅด๊ฒ ์๋ํ๋์ง ํ์ธํฉ๋๋ค.
- ์ธํฐํ์ด์ค ์ ์: ์ปดํฌ๋ํธ๋ฅผ ๋ณํํ๋ฉด์, ์ปดํฌ๋ํธ ๊ฐ์ ๋ฐ์ดํฐ ๋ฐ ์ํธ ์์ฉ์ ๋ํ๋ด๋ ์ธํฐํ์ด์ค์ ํ์ ์ ์ ์ํฉ๋๋ค.
- ์ ์์ค ๋ชจ๋ ๊ตฌํ: ๋ณํ๋ ์ปดํฌ๋ํธ์ ํ์ํ ์ ์์ค ๋ชจ๋์ ๊ตฌํํ๊ณ , ์ ์๋ ์ธํฐํ์ด์ค์ ํ์ ์ ๋ฐ๋ผ ์๋ํ๋์ง ํ์ธํฉ๋๋ค.
4. Bang (!) ์ฐ์ฐ์: ์ฃผ์ํด์ ์ฌ์ฉํ์ธ์
Non-null ๋จ์ธ ์ฐ์ฐ์(`!`)๋ TypeScript ์ปดํ์ผ๋ฌ์๊ฒ ๊ฐ์ด `null`์ด๊ฑฐ๋ `undefined`๊ฐ ์๋์ ํ์ ํ๋ค๊ณ ์๋ ค์ค๋๋ค. ์ปดํ์ผ๋ฌ๊ฐ ๊ทธ๋ด ์ ์๋ค๊ณ ์๊ฐํ๋๋ผ๋ ๋ง์ ๋๋ค. ์ด ์ฐ์ฐ์๋ ๋๋ฌผ๊ฒ, ๊ทธ๋ฆฌ๊ณ ์ฃผ์ํด์ ์ฌ์ฉํด์ผ ํฉ๋๋ค. `!` ์ฐ์ฐ์๋ฅผ ๊ณผ๋ํ๊ฒ ์ฌ์ฉํ๋ฉด ๊ทผ๋ณธ์ ์ธ ๋ฌธ์ ๋ฅผ ๊ฐ๋ฆฌ๊ณ TypeScript๋ฅผ ์ฌ์ฉํ๋ ๋ณธ๋์ ๋ชฉ์ ์ ๋ฌด๋ ฅํํ ์ ์์ต๋๋ค.
์์:
const element = document.getElementById(\"myElement\")!;
// TypeScript assumes element is not null or undefined
element.textContent = "Hello";
๊ฐ์ด ๋ฐํ์์ ๊ฒฐ์ฝ `null`์ด๊ฑฐ๋ `undefined`๊ฐ ์๋์ ์ ๋์ ์ผ๋ก ํ์ ํ ๋๋ง `!`๋ฅผ ์ฌ์ฉํ์ธ์. ์ ์ฌ์ ์ผ๋ก `null`์ด๊ฑฐ๋ `undefined`์ธ ๊ฐ์ ๋ ์์ ํ๊ฒ ์ฒ๋ฆฌํ๋ ค๋ฉด ์ ํ์ ์ฒด์ด๋(`?.`) ๋๋ ๋ ๋ณํฉ(`??`)๊ณผ ๊ฐ์ ๋์์ ๊ณ ๋ คํ์ธ์.
๋๊ตฌ ๋ฐ ๊ธฐ์
๋ช ๊ฐ์ง ๋๊ตฌ์ ๊ธฐ์ ์ด ๋ง์ด๊ทธ๋ ์ด์ ํ๋ก์ธ์ค๋ฅผ ์ฉ์ดํ๊ฒ ํ ์ ์์ต๋๋ค:
- TypeScript ์ปดํ์ผ๋ฌ (tsc): TypeScript ์ฝ๋๋ฅผ JavaScript๋ก ์ปดํ์ผํ๋ ํต์ฌ ๋๊ตฌ์ ๋๋ค. ๋์ ECMAScript ๋ฒ์ , ๋ชจ๋ ์์คํ ๋ฐ ํ์ ๊ฒ์ฌ ๊ท์น๊ณผ ๊ฐ์ ์ปดํ์ผ ํ๋ก์ธ์ค๋ฅผ ๊ตฌ์ฑํ๊ธฐ ์ํ ๋ค์ํ ์ต์ ์ ์ ๊ณตํฉ๋๋ค.
- tsconfig.json: TypeScript ํ๋ก์ ํธ์ ์ปดํ์ผ๋ฌ ์ต์ ์ ์ง์ ํ๋ ๊ตฌ์ฑ ํ์ผ์ ๋๋ค. ์ปดํ์ผ ํ๋ก์ธ์ค๋ฅผ ์ฌ์ฉ์ ์ ์ํ๊ณ ํ๋ก์ ํธ๋ณ ์ค์ ์ ์ ์ํ ์ ์์ต๋๋ค.
- ESLint: JavaScript ๋ฐ TypeScript ์ฝ๋ ๋ชจ๋์์ ์ฝ๋ ์คํ์ผ์ ์ ์ฉํ๊ณ ์ ์ฌ์ ์ธ ์ค๋ฅ๋ฅผ ๊ฐ์งํ๋ ๋ฐ ์ฌ์ฉ๋ ์ ์๋ ์ธ๊ธฐ ์๋ ๋ฆฐํ ๋๊ตฌ์ ๋๋ค. TypeScript๋ฅผ ์ํด ํน๋ณํ ์ค๊ณ๋ ESLint ํ๋ฌ๊ทธ์ธ์ ํ์ ์์ ์ฑ ๋ฐ ์ฝ๋ ํ์ง์ ์ํ ์ถ๊ฐ ๋ฆฐํ ๊ท์น์ ์ ๊ณตํฉ๋๋ค.
- Prettier: ์ผ๊ด๋ ์คํ์ผ์ ๋ฐ๋ผ ์ฝ๋๋ฅผ ์๋์ผ๋ก ํฌ๋งทํ๋ ์ฝ๋ ํฌ๋งทํฐ์ ๋๋ค. IDE ๋๋ ๋น๋ ํ๋ก์ธ์ค์ ํตํฉ๋์ด ์ฝ๋๊ฐ ํญ์ ์ฌ๋ฐ๋ฅด๊ฒ ํฌ๋งท๋๋๋ก ํ ์ ์์ต๋๋ค.
- ํ์ ์ ์ ํ์ผ (.d.ts): ๊ธฐ์กด JavaScript ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํ์ ์ ์ ์ธํ๋ ํ์ผ์ ๋๋ค. ์ด ํ์ผ์ ํตํด TypeScript ์ฝ๋์์ JavaScript ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์์ ํ ํ์ ์์ ์ฑ์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค. DefinitelyTyped๋ ๋ง์ ์ธ๊ธฐ ์๋ JavaScript ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํ์ ์ ์ ํ์ผ์ ์ปค๋ฎค๋ํฐ์์ ๊ด๋ฆฌํ๋ ์ ์ฅ์์ ๋๋ค.
- IDE ์ง์: Visual Studio Code, WebStorm ๋ฑ๊ณผ ๊ฐ์ IDE์ ๊ฐ๋ ฅํ TypeScript ์ง์์ ํ์ฉํ์ธ์. ์ด๋ค IDE๋ ์๋ ์์ฑ, ์ ์ ์ด๋, ๋ฆฌํฉํ ๋ง ๋๊ตฌ ๋ฐ ์ธ๋ผ์ธ ์ค๋ฅ ๊ฒ์ฌ์ ๊ฐ์ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ฌ ๋ง์ด๊ทธ๋ ์ด์ ํ๋ก์ธ์ค๋ฅผ ํจ์ฌ ๋ ์ํํ๊ฒ ๋ง๋ญ๋๋ค.
๋ง์ด๊ทธ๋ ์ด์ ์ ์ํ ์ค์ฉ์ ์ธ ๋จ๊ณ
JavaScript ํ๋ก์ ํธ๋ฅผ TypeScript๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ๋ ๋จ๊ณ๋ณ ๊ฐ์ด๋๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค:
- TypeScript ํ๋ก์ ํธ ์ค์ :
- ํ๋ก์ ํธ ๋ฃจํธ์ `tsconfig.json` ํ์ผ์ ์์ฑํฉ๋๋ค. ๊ธฐ๋ณธ์ ์ธ ๊ตฌ์ฑ์ผ๋ก ์์ํ์ฌ ํ์์ ๋ฐ๋ผ ์ฌ์ฉ์ ์ ์ํ์ธ์. ์ต์ํ์ `tsconfig.json`์ ๋ค์๊ณผ ๊ฐ์ ์ ์์ต๋๋ค:
- TypeScript ์ปดํ์ผ๋ฌ ์ค์น: `npm install -D typescript` ๋๋ `yarn add -D typescript`.
- `allowJs` ํ์ฑํ:
- TypeScript๊ฐ JavaScript ํ์ผ์ ์ปดํ์ผํ ์ ์๋๋ก `tsconfig.json` ํ์ผ์ `"allowJs": true`๋ฅผ ์ถ๊ฐํฉ๋๋ค.
- ํ์ผ ์ด๋ฆ ๋ณ๊ฒฝ:
- ๋จ์ผ `.js` ํ์ผ์ `.ts`(JSX๊ฐ ํฌํจ๋ ๊ฒฝ์ฐ `.tsx`)๋ก ์ด๋ฆ์ ๋ณ๊ฒฝํ๋ ๊ฒ๋ถํฐ ์์ํฉ๋๋ค.
- ํ์ ์ด๋ ธํ ์ด์ ์ถ๊ฐ:
- ์ฝ๋์ ํ์ ์ด๋ ธํ ์ด์ ์ ์ถ๊ฐํ๊ธฐ ์์ํฉ๋๋ค. ํจ์ ๋งค๊ฐ๋ณ์, ๋ฐํ ํ์ ๋ฐ ๋ณ์ ์ ์ธ๋ถํฐ ์์ํ์ธ์.
- ์ ํํ ํ์ ์ ๋ํด ํ์ ์ด ์๋ ๊ฒฝ์ฐ `any` ํ์ ์ ์์ ํ๋ ์ด์คํ๋๋ก ์ฌ์ฉํ์ธ์. ํ์ง๋ง, ๊ฐ๋ฅํ ํ ๋นจ๋ฆฌ `any`๋ฅผ ๋ ๊ตฌ์ฒด์ ์ธ ํ์ ์ผ๋ก ๋์ฒดํ๋ ๊ฒ์ ๋ชฉํ๋ก ํ์ธ์.
- ์ปดํ์ผ๋ฌ ์ค๋ฅ ํด๊ฒฐ:
- ์ด์ TypeScript ์ปดํ์ผ๋ฌ๊ฐ ์ฝ๋์์ ์ค๋ฅ๋ฅผ ๋ณด๊ณ ํ๊ธฐ ์์ํ ๊ฒ์ ๋๋ค. ํ์ ์ด๋ ธํ ์ด์ ์ ์ถ๊ฐํ๊ฑฐ๋ ํ์์ ๋ฐ๋ผ ์ฝ๋๋ฅผ ๋ฆฌํฉํ ๋งํ๋ฉด์ ์ด๋ฌํ ์ค๋ฅ๋ฅผ ํ๋์ฉ ํด๊ฒฐํ์ธ์.
- ํ์ ์ ์ ์ค์น:
- ์ฌ์ฉ ์ค์ธ JavaScript ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์๋ค๋ฉด, DefinitelyTyped์์ ํด๋น ํ์ ์ ์ ํ์ผ์ ์ค์นํ์ธ์. ์๋ฅผ ๋ค์ด, Lodash๋ฅผ ์ฌ์ฉ ์ค์ด๋ผ๋ฉด `@types/lodash` ํจํค์ง๋ฅผ ์ค์นํฉ๋๋ค: `npm install -D @types/lodash` ๋๋ `yarn add -D @types/lodash`.
- ๋ฆฌํฉํ ๋ง ๋ฐ ๊ฐ์ :
- ๋ ๋ง์ ์ฝ๋๋ฅผ TypeScript๋ก ๋ณํํ๋ฉด์, ๋ฆฌํฉํ ๋งํ๊ณ ์ ๋ฐ์ ์ธ ์ฝ๋ ํ์ง์ ๊ฐ์ ํ ๊ธฐํ๋ฅผ ์ก์ผ์ธ์. TypeScript์ ํ์ ์์คํ ์ ์ฌ์ฉํ์ฌ ์ ์ฌ์ ์ธ ์ค๋ฅ๋ฅผ ์๋ณํ๊ณ ์ ๊ฑฐํ์ธ์.
- ๋ฆฐํ ๋ฐ ํฌ๋งทํ :
- ESLint ๋ฐ Prettier๋ฅผ ๊ตฌ์ฑํ์ฌ ์ฝ๋ ์คํ์ผ์ ์ ์ฉํ๊ณ ์ ์ฌ์ ์ธ ์ค๋ฅ๋ฅผ ๊ฐ์งํฉ๋๋ค. ํฅ์๋ ํ์ ๊ฒ์ฌ๋ฅผ ์ํด TypeScript ์ ์ฉ ESLint ํ๋ฌ๊ทธ์ธ์ ์ฌ์ฉํ์ธ์.
- ์ง์์ ํตํฉ:
- TypeScript ์ปดํ์ผ ๋ฐ ๋ฆฐํ ์ ์ง์์ ํตํฉ(CI) ํ์ดํ๋ผ์ธ์ ํตํฉํ์ฌ ์ฝ๋๊ฐ ํญ์ ํ์ ์์ ํ๊ณ ์ฝ๋ฉ ํ์ค์ ์ค์ํ๋๋ก ํฉ๋๋ค.
{
\"compilerOptions\": {
\"target\": \"es5\",
\"module\": \"commonjs\",
\"strict\": true,
\"esModuleInterop\": true,
\"skipLibCheck\": true,
\"forceConsistentCasingInFileNames\": true
}
}
์ผ๋ฐ์ ์ธ ๋ฌธ์ ํด๊ฒฐ
TypeScript๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ๋ ๊ฒ์ ๋ช ๊ฐ์ง ์ด๋ ค์์ ์ด๋ํ ์ ์์ต๋๋ค. ๋ค์์ ์ด๋ฅผ ๊ทน๋ณตํ๋ ๋ฐฉ๋ฒ์ ๋๋ค:
- ๊ธฐ์กด JavaScript ๋ผ์ด๋ธ๋ฌ๋ฆฌ: ๋ง์ JavaScript ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๊ณต์ TypeScript ํ์ ์ ์๊ฐ ์์ต๋๋ค. DefinitelyTyped์์ ํ์ ์ ์๋ฅผ ์ค์นํ๊ฑฐ๋ ์ง์ ์์ฑํ ์ ์์ต๋๋ค. ์ง์ ์์ฑํ๋ฉด ํน์ ์ฌ์ฉ๋ฒ์ ๋ง๊ฒ ํ์ ์ ์กฐ์ ํ๊ณ ์ปค๋ฎค๋ํฐ์ ๊ธฐ์ฌํ ์ ์์ต๋๋ค.
- ๋์ ์ฝ๋: JavaScript์ ๋์ ์ธ ํน์ฑ ๋๋ฌธ์ ์ฝ๋์ ํน์ ๋ถ๋ถ์ ํ์ ์ ์ถ๊ฐํ๊ธฐ ์ด๋ ค์ธ ์ ์์ต๋๋ค. ์ด๋ฌํ ๊ฒฝ์ฐ `any` ํ์ ์ ์ฌ์ฉํ๊ฑฐ๋ ์ฝ๋๋ฅผ ํ์ ์นํ์ ์ผ๋ก ๋ฆฌํฉํ ๋งํ๋ ๊ฒ์ ๊ณ ๋ คํ ์ ์์ต๋๋ค.
- ๋น๋ ์์คํ ํตํฉ: ๊ธฐ์กด ๋น๋ ์์คํ ์ TypeScript๋ฅผ ํตํฉํ๋ ค๋ฉด ์ผ๋ถ ๊ตฌ์ฑ์ด ํ์ํ ์ ์์ต๋๋ค. ๋น๋ ์คํฌ๋ฆฝํธ๋ฅผ ์ ๋ฐ์ดํธํ์ฌ TypeScript ์ฝ๋๋ฅผ ์ปดํ์ผํ๊ณ JavaScript ์ถ๋ ฅ์ ์์ฑํ๋๋ก ํ์ธํ์ธ์. Webpack, Parcel, Rollup๊ณผ ๊ฐ์ ๋๊ตฌ๋ ํ์ํ TypeScript ์ง์์ ์ ๊ณตํฉ๋๋ค.
- ๋ ๊ฑฐ์ ์ฝ๋: ๋งค์ฐ ์ค๋๋๊ฑฐ๋ ํํธ์์ด ์์ฑ๋ JavaScript ์ฝ๋๋ฅผ ๋ง์ด๊ทธ๋ ์ด์ ํ๋ ๊ฒ์ ์ด๋ ค์ธ ์ ์์ต๋๋ค. ๊ฐ์ฅ ์ค์ํ ์ฝ๋ ๋ถ๋ถ๋ถํฐ ๋จผ์ ๋ณํํ๋ ๋ฐ ์ง์คํ๊ณ ๋๋จธ์ง๋ ์ ์ง์ ์ผ๋ก ๋ฆฌํฉํ ๋งํ์ธ์.
์์: ๊ฐ๋จํ ํจ์ ๋ง์ด๊ทธ๋ ์ด์
๊ฐ๋จํ ์์๋ฅผ ํตํด ๋ง์ด๊ทธ๋ ์ด์ ํ๋ก์ธ์ค๋ฅผ ์ค๋ช ํ๊ฒ ์ต๋๋ค. ๋ค์ JavaScript ํจ์๊ฐ ์๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค:
function greet(name) {
return \"Hello, \" + name + \"!";
}
์ด ํจ์๋ฅผ TypeScript๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ๋ ค๋ฉด ๋งค๊ฐ๋ณ์์ ๋ฐํ ํ์ ์ ํ์ ์ด๋ ธํ ์ด์ ์ ์ถ๊ฐํ ์ ์์ต๋๋ค:
function greet(name: string): string {
return \"Hello, \" + name + \"!";
}
์ด์ `greet` ํจ์๋ฅผ ์ซ์๋ก ํธ์ถํ๋ ค๊ณ ํ๋ฉด TypeScript ์ปดํ์ผ๋ฌ๊ฐ ์ค๋ฅ๋ฅผ ๋ณด๊ณ ํ ๊ฒ์ ๋๋ค:
greet(123); // Error: Argument of type 'number' is not assignable to parameter of type 'string'.
์ด๋ TypeScript์ ํ์ ์์คํ ์ด ๊ฐ๋ฐ ํ๋ก์ธ์ค ์ด๊ธฐ์ ์ค๋ฅ๋ฅผ ์ด๋ป๊ฒ ํฌ์ฐฉํ ์ ์๋์ง ๋ณด์ฌ์ค๋๋ค.
์ํํ ์ ํ์ ์ํ ๋ชจ๋ฒ ์ฌ๋ก
TypeScript๋ก์ ์ํํ๊ณ ์ฑ๊ณต์ ์ธ ๋ง์ด๊ทธ๋ ์ด์ ์ ๋ณด์ฅํ๊ธฐ ์ํ ๋ช ๊ฐ์ง ๋ชจ๋ฒ ์ฌ๋ก๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- ๊ฒฌ๊ณ ํ ๊ธฐ๋ฐ์ผ๋ก ์์: ๊ธฐ์กด JavaScript ์ฝ๋๋ฒ ์ด์ค๊ฐ ์ ๊ตฌ์กฐํ๋์ด ์๊ณ , ์ ํ ์คํธ๋์์ผ๋ฉฐ, ์ผ๊ด๋ ์ฝ๋ฉ ํ์ค์ ๋ฐ๋ฅด๋์ง ํ์ธํ์ธ์. ์ด๋ ๋ง์ด๊ทธ๋ ์ด์ ํ๋ก์ธ์ค๋ฅผ ํจ์ฌ ๋ ์ฝ๊ฒ ๋ง๋ค ๊ฒ์ ๋๋ค.
- ๋จ์ ํ ์คํธ ์์ฑ: ๋ง์ด๊ทธ๋ ์ด์ ์ ์์ํ๊ธฐ ์ ์ JavaScript ์ฝ๋์ ๋ํ ํฌ๊ด์ ์ธ ๋จ์ ํ ์คํธ๋ฅผ ์์ฑํ์ธ์. ์ด๋ ๋ณํ๋ ์ฝ๋๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ์๋ํ๊ณ ์๋ก์ด ํ์ ์ด ์ด๋ ํ ํ๊ท๋ ๋ฐ์์ํค์ง ์์๋์ง ํ์ธํ๋ ๋ฐ ๋์์ด ๋ ๊ฒ์ ๋๋ค.
- ์ฝ๋ ๋ฆฌ๋ทฐ: ๋ณํ๋ ์ฝ๋๊ฐ ํ์ ์์ ํ๊ณ , ์ ์์ฑ๋์์ผ๋ฉฐ, ์ฝ๋ฉ ํ์ค์ ์ค์ํ๋์ง ํ์ธํ๊ธฐ ์ํด ์ฒ ์ ํ ์ฝ๋ ๋ฆฌ๋ทฐ๋ฅผ ์ํํ์ธ์.
- ๊ตฌ์ฑ์ด ํต์ฌ: ํ๋ก์ ํธ ์๊ตฌ ์ฌํญ์ ๋ง๊ฒ `tsconfig.json` ํ์ผ์ ์ ์คํ๊ฒ ๊ตฌ์ฑํ์ธ์. `strict`, `noImplicitAny`, `strictNullChecks`์ ๊ฐ์ ์ต์ ์ ์ฃผ์๋ฅผ ๊ธฐ์ธ์ด์ธ์.
- ํ์ ์์คํ ํ์ฉ: TypeScript์ ํ์ ์์คํ ์ ์ต๋ํ ํ์ฉํ์ฌ ์ฝ๋ ํ์ง, ์ ์ง๋ณด์์ฑ ๋ฐ ์ ๋ขฐ์ฑ์ ํฅ์์ํค์ธ์. ์ ๋ค๋ฆญ, ์ธํฐํ์ด์ค, ํ์ ๋ณ์นญ๊ณผ ๊ฐ์ ๊ณ ๊ธ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ ๊ฒ์ ๋๋ ค์ํ์ง ๋ง์ธ์.
- ์ง์์ ์ธ ํ์ต: TypeScript๋ ๋์์์ด ์งํํ๋ ์ธ์ด์ ๋๋ค. ์ต์ ๊ธฐ๋ฅ๊ณผ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ์ต์ ์ํ๋ก ์ ์งํ์ฌ ์ธ์ด๋ฅผ ํจ๊ณผ์ ์ผ๋ก ์ฌ์ฉํ๊ณ ์๋์ง ํ์ธํ์ธ์.
- ํ์ ๋ฌธ์ํ: TypeScript ์ฝ๋์ JSDoc ์ฃผ์์ ์ถ๊ฐํ์ฌ ํ์ , ํจ์, ํด๋์ค์ ๋ชฉ์ ๊ณผ ์์๋๋ ๋์์ ๋ฌธ์ํํ์ธ์. ์ด๋ ๋ค๋ฅธ ๊ฐ๋ฐ์๊ฐ ์ฝ๋๋ฅผ ์ดํดํ๊ณ ์ ์ง๋ณด์ํ๋ ๊ฒ์ ๋ ์ฝ๊ฒ ๋ง๋ค ๊ฒ์ ๋๋ค.
- ์ธ๋ด์ฌ์ ๊ฐ์ง์ธ์: ๋๊ท๋ชจ ์ฝ๋๋ฒ ์ด์ค๋ฅผ TypeScript๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ๋ ๋ฐ๋ ์๊ฐ๊ณผ ๋ ธ๋ ฅ์ด ํ์ํ ์ ์์ต๋๋ค. ๋์ค์ ์ด๋ ค์์ด ๋ฐ์ํ๋๋ผ๋ ์ธ๋ด์ฌ์ ๊ฐ์ง๊ณ ๋๋ดํ์ง ๋ง์ธ์.
๊ฒฐ๋ก
JavaScript์์ TypeScript๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ๋ ๊ฒ์ ์ฝ๋ ํ์ง, ์ ์ง๋ณด์์ฑ ๋ฐ ๊ฐ๋ฐ์ ์์ฐ์ฑ ์ธก๋ฉด์์ ์๋นํ ์ด์ ์ ๊ฐ์ ธ์ฌ ์ ์๋ ์ค์ํ ํฌ์์ ๋๋ค. ์ ๋ต์ ์ธ ์ ๊ทผ ๋ฐฉ์์ ๋ฐ๋ฅด๊ณ , ์ฌ๋ฐ๋ฅธ ๋๊ตฌ๋ฅผ ํ์ฉํ๋ฉฐ, ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ์ค์ํจ์ผ๋ก์จ JavaScript ํ๋ก์ ํธ๋ฅผ ์ฑ๊ณต์ ์ผ๋ก TypeScript๋ก ์ ํํ๊ณ ๋ ๊ฒฌ๊ณ ํ๊ณ ํ์ฅ ๊ฐ๋ฅํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ ์ ์์ต๋๋ค.
์ ์ง์ ์ฑํ ์ ๋ต์ TypeScript ๊ธฐ๋ฅ์ ๋ํ ํ์คํ ์ดํด์ ์ง์์ ์ธ ํ์ต์ ๋ํ ํ์ ๊ณผ ๊ฒฐํฉ๋์ด, ๋ ํ์ ์์ ํ๊ณ ์ ์ง๋ณด์ํ๊ธฐ ์ฌ์ด ์ฝ๋๋ฒ ์ด์ค๋ฅผ ํฅํ ๊ธธ๋ก ์๋ดํ ๊ฒ์ ๋๋ค. ํ์ ์ ํ์ ๋ฐ์๋ค์ด๋ฉด ํ๋ ์น ๊ฐ๋ฐ์ ๊ณผ์ ๋ฅผ ํด๊ฒฐํ ์ค๋น๊ฐ ์ ๋์ด ์์ ๊ฒ์ ๋๋ค.